﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Smo;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Common;
using STLGROUP.Layers.DataAccessLayers;
using STLGROUP.Layers.Common;

namespace QuanLyBanHang.SystemForms
{
    public partial class frmRestore : STLGROUP.Layers.Presentations.FormBase.frmBase
    {

        #region Variables

        //private QuanLyBanHangEntities _ctx = new QuanLyBanHangEntities();
        private string _serverName;

        #endregion

        #region Constructors

        public frmRestore()
        {
            InitializeComponent();
        } 

        #endregion

        #region Private Methods

        #region Open

        private void Open()
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Title = "Chọn file cần phục hồi dữ liệu";
            open.Multiselect = false;
            open.Filter = "*.bak|*.bak";

            DialogResult result = open.ShowDialog();

            if (result == DialogResult.OK)
            {
                cbxPath.Text = open.FileName;
            }
        } 

        #endregion

        #region Restore_DB

        private void Restore_DB(string pathFile,string databaseName)
        {
            if (string.IsNullOrWhiteSpace(databaseName.Trim()) || string.IsNullOrWhiteSpace(pathFile.Trim()))
            {
                MessageBox.Show("Vui lòng nhập đầy đủ đường dẫn file phục hồi và tên cơ sở dữ liệu", "Lỗi");
                return;
            }

            try
            {
                _serverName = Cache.Context.Connection.DataSource;
                Server server = new Server(_serverName);
                if (server.Databases.Contains(databaseName))
                {
                    Cache.Context.ExecuteStoreCommand(string.Format("ALTER DATABASE {0} SET OFFLINE", databaseName));
                }
                Restore res = new Restore();
                BackupDeviceItem bkDeciceItem = new BackupDeviceItem(pathFile, DeviceType.File);
                res.Database = databaseName;
                res.Action = RestoreActionType.Database;
                res.NoRecovery = false;
                res.Devices.Add(bkDeciceItem);
                res.PercentCompleteNotification = 10;
                res.ReplaceDatabase = true;
                res.SqlRestore(server);
                MessageBox.Show("Phục hồi thành công lúc " + string.Format(DateTime.Now.ToString("hh:mm:ss tt {0} dd {1} MM {2} yyyy"), "ngày", "tháng", "năm"), "Thông báo",
                                   MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Chú ý:\n Kiểm tra lại có thể Database đã tồn tại với một tên khác\nPhục hồi dữ liệu không thành công.\nVui lòng kiểm tra lại đường dẫn file phục hồi và tên cơ sở dữ liệu\n" + ex.Message, "Lỗi");
            }
        } 

        #endregion

        #endregion

        #region Events

        private void btxOpen_Click(object sender, EventArgs e)
        {
            Open();
        }

        private void btxRestore_Click(object sender, EventArgs e)
        {
            Restore_DB(cbxPath.Text, txtDatabaseName.Text);
        }

        private void btxReset_Click(object sender, EventArgs e)
        {
            cbxPath.Text = txtDatabaseName.Text = string.Empty;
        }

        private void btxExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #endregion

    }
}
